Der Datensatz handelt von TripAdvisor Bewertungen vieler Restaurants von 31 europäischen Städten.
Der endgültige Datensatz mit dem wir in diesem Projekt arbeiten werden, besteht aus acht Variablen (Spalten) mit 125.238 Observationen (Zeilen). Diese beinhalten:
Name: Name des Restaurants - Textvariable (unique)
City: Stadt in der sich das Restaurant befindet - Kategoriale Faktorvariable mit 31 Ausprägungen (London mit 18113 Einträgen, Paris mit 14867 Einträgen, …)
Cuisine_Style: Essensrichtungen des Restaurants - Textvariable (grundsätzlich besteht diese aus mehreren Faktoren innerhalb eines Python list Objektes / 31222 NA Werte)
Ranking: Rang des Restaurants im Vergleich zu allen anderen Restaurants in der Stadt - Diskrete Variable (Min: 1, Mean: 3658, Median: 2256, Max: 16444 / 9370 NA Werte)
Rating: Bewertung des Restaurants von 1-5 in 0.5 Schritten - Kategoriale Faktorvariable mit 9 Ausprägungen (Bewertung 4 mit 39841 Einträgen, 4.5 mit 31325 Einträgen, … / 9389 NA Werte)
Price_Range: Preisbewertung - Kategoriale Faktorvariable mit 3 Ausprägungen (medium mit 54302 Einträgen, high mit 4306 Einträgen und low mit 18988 Einträgen / 47642 NA Werte)
Review_Count: Anzahl der Reviews - Diskrete Variable (Min: 2, Mean: 125.2, Median: 32, Max: 16478 / 17062 NA Werte)
Reviews: Zwei Reviews des Restaurants und die Daten, an dem die Reviews geschrieben wurden - Textvariable (als Python list Objekt abgespeichert)
Name City Cuisine_Style Ranking
1 Martine of Martine's Table Amsterdam ['French', 'Dutch', 'European'] 1
2 Biercafe Gollem Amsterdam ['Bar', 'Pub'] 14
3 Senses Restaurant Amsterdam ['International', 'European'] 21
Rating Price_Range Review_Count
1 5 medium 136
2 4.5 medium 586
3 4.5 high 1380
Reviews
1 [['Just like home', 'A Warm Welcome to Wintry Amsterdam'], ['01/03/2018', '01/01/2018']]
2 [['Awesome little pub', 'An amazing little place with a vast choice...'], ['12/17/2017', '12/13/2017']]
3 [['Always A Special Experience', 'Excellent'], ['01/05/2018', '12/23/2017']]
Hier zu sehen ist die Verteilung der Anzahl der Restaurants pro Stadt absteigend geordnet. Zusätzlich ist noch die Verteilung der Preis Einteilung pro Stadt zu sehen.
Gut zu sehen ist, dass in dem Datensatz Städte wie London, Paris sehr viele Restaurants besitzen. (Bereich ~15.000+) Danach ist ein stärkerer Abfall an Vorkommnissen zu sehen und die Städte Luxenburg und Ljubljana besitzen am wenigsten Restuarants hier. (<1000)
Auch zu erkennen ist, dass die meisten Restaurants in so gut wie allen Städten in die Preis Klasse medium fallen. Am wenigsten Restaurants sind in der Klasse high. Der Anteil an nicht klassifizierter Restaurants (NA) ist sehr hoch und ist ein beträchtlicher Anteil.
Hier zu sehen ist die Verteilung der Anzahl der Rating Stufen.
Gut zu erkennen ist, dass die Ratings 4 und 4.5 am häufigsten gegeben werden und Ratings wie 3 oder 5 viel seltener. Ratings <= 2.5 kommen am seltensten vor. Dies könnte sich dadurch erklären lassen, dass diese Restaurants sich nicht besonders gut halten werden und wahrscheinlich öfters schließen müssen als Restauraunts mit besseren Bewertungen.
Hier zu sehen ist die Verteilung der Anzahl der Rating Stufen pro Preisklasse.
Es ist ersichtlich, dass Restaurants mit einer niedrigen Preisklasse tendenziell eher weniger hohe Bewertungen haben (im Vergleich zu den anderen Preisklassen) Restaurants in einer hohen Preisklasse hingegen besitzen höhere Ratings welche im Schnitt 4 oder höher sind.
Ein weiteres interessantes Merkmal ist, dass Restaurants ohne Preisklasseneinstufung tendenziell viel mehr 5 Sterne Bewertungen haben. Dies kann entweder ein statistischer Zufall sein oder es könnte daran liegen, dass diese Restaurants nicht in traditionelle Preisklassen eingeteilt werden können und dadurch Leute besser ansprechen (was aber eher weit hergeholt ist).
Hier zu sehen ist die Verteilung der Anzahl der Review Bewertungen.
Dieser Graph gruppiert auf der x-Achse die Anzahl der Reviews in 50er Blöcke und stellt davon die Anzahl der Vorkommnisse auf der y-Achse dar.
Hier kann man stark betrachten, dass die Verteilung stark rechts fallend ist und die meisten Vorkommnisse in die Kategorie von 0-50 Reviews fallen. Dies bedeutet, dass die meisten Restaurants wenig Reviews haben und das nur noch ein sehr kleiner Anteil an Restaurants mehr als 500 Reviews haben.
Hier zu sehen ist die Verteilung des Rankings von Restaurants erklärt durch die Review Anzahl.
Es ist eindeutig ersichtlich, dass Restaurants welche ein hohes Ranking in ihrer Stadt haben, eine dementsprechend höhere Anzahl an Reviews hat. Dies kann sich dadurch erklären lassen, dass Top-Restaurants öfters besucht werden und dadurch mehr Leute auch eine Bewertung schreiben.
Auswahl des Merkmals zur Vorhersage:
Auswahl: Ranking
Das Ranking sollte ein gutes Merkmal für die Vorhersage sein, da dieser gut durch die anderen Parameter vorhersagbar sein sollte (in gewissen Grenzen) und da er recht interessant für neue Restaurants sein könnte.
Dadurch könnte man dann schauen, in welcher Stadt es sich auszahlen würde, Restaurants zu öffnen, anhand des jeweiligen Rankings im Vergleich zu den anderen Restaurants in der Stadt.
Vorgestellt wird ein Neural Network.
Es gibt mehrere akzeptable Modelle. Eine davon ist Elu mit 20 Input Units und 7 Epochen (Es Overfitted meist ab 7-10 Epochen im Schnitt) -> Kommt auf in etwa 11,4% Error
Trotzdem haben wir uns nach vielen Durchläufen dazu entschieden, ein Modell mit mehreren hidden layers zu nehmen, da diese mit über zehn verschiedenen Zuteilungen auf Trainings- und Testdaten, konsistent waren. Die mit nur einem hidden layer hatten in 3/10 starke Inkonsistenz und haben zum Beispiel schon in der zweiten Epoche overfitted, was wir vermeiden wollten. Seeden wäre auch ein Option gewesen, hätte aber eher zum selektiven Datenaussuchen geführt, was wir vermeiden wollten damit ein gutes Generalisationsmodell entsteht.
Für unseren Fall der Reggression würden wir uns für das getunte Model von keras/tensorflow entscheiden, da dieses den geringsten Error aufweist. Baummodelle waren ebenfalls akzeptabel mit um die 20% Error, allerdings war das Neuronale Netz um zirka 8-10% besser.
Eine grafische Darstellung der Empfindungen der Reviews je Stadt.
Wir analyiseren den Text um die Stimmung/Empfinden der Person zu erkennen, waren ihre Bewertungen positiv oder negativ. Dafür schauen wir uns 6 Städte an: London, Paris, Berlin, Madrid, Rom und Wien.
Wie man erkennen kann, haben alle Städte eine positive Differenz, was darauf schließen lässt, dass alle hauptsächlich positiv Bewertet wurden. London hat den größten Unterschied von positiven zu negativen Bewertungen, gefolgt von Paris. Wien hat die kleinste Differenz, was bedeutet, dass die Anzahl an positiven und negativen Bewertungen sehr ähnlich ist.
Aus den einzelnen Reviewtexten wird ein Copus erstellt und dieser für die Analyse vorbereitet. Dabei werden numbers, capitalization, common words, punctuation bearbeitet bzw. entfernt.
Bei Betrachtung der häufigsten Wörter erkennt man viele positive Wörter und Pizza dürfte wohl sehr beliebt sein. Wer mag den keine Pizza? Neben Pizza ist auch italienisches Essen sehr beliebt.